草庐IT

Python NotImplemented 常量

全部标签

c++ - 针对编译时常量优化的函数

假设我有一个vector长度计算函数,它有一个额外的inc参数(这告诉相邻元素之间的距离)。一个简单的实现是:floatcalcLength(constfloat*v,intsize,intinc){floatl=0;for(inti=0;i现在,calcLength可以用两种inc参数调用:当inc在编译时已知时,当它是不是。我想为inc(如1)的常见编译时值优化calcLength版本。所以,我会有这样的东西:templatestructConstant{staticconstexprintvalue(){returnC;}};structVar{intv;constexprVar

c++ - C++编译器如何保证常量成员变量的线程安全?

C++11x标准更改了“const”关键字的语义。现在它意味着真正的线程安全。据我了解,const成员变量等于javafinal字段。我想在CPUicore7G++4.7.1上检查。我使用as-std=c++0x-pthread-DCONST和不使用编译了以下代码。两个可执行文件是相同的。汇编版本没有*fence指令。我希望在构造函数的末尾看到*fence。classBig{public:#ifdefCONSTconst#endiflonga;Big(longa):a(a){}voidcheck()#ifdefCONSTconst#endif{assert(a==123L);}};in

c++ - 在 C++ 中将动态声明的数组传递为常量

我使用这样的函数动态创建了一个数组://..double**allocate_2d(constintwd1,constintwd2){double**array=newdouble*[wd1];for(intidx=0;idx我想将结果数组作为常量参数传递给函数。我希望数组在函数中是“只读的”。func(constdouble**array){//computationsusingarray}但是我收到以下错误:从‘double**’到‘constdouble**’的无效转换有没有可能做这样的事情? 最佳答案 OP签名的原因func

c++ - Linux gcc 和 Windows Visual Studio 处理静态常量的区别?

我们一直在Linux(gcc)和Windows(VisualStudio)上编译一个库,正如预期的那样,发现在两个平台上获得干净编译所需的东西之间存在细微但不显着的差异。今天,我将gcc编译器标志更改为使用-fPIC(以启用共享库)。当我们测试将程序链接到库时,我们开始出现错误(第一次),undefinedreference指向2个在头文件中声明和初始化的静态常量(但不在.cpp中文件)。我找到了thisStackOverflowanswer这似乎解决了这个问题,解释说,即使staticconst在头文件中初始化,它仍然需要在代码文件中定义。进行该更改确实消除了gcc链接器错误。但是,

c++ - 编译时常量与运行时常量

我目前正在开发自己的数学库以提高我的C++技能。我偶然发现了boost'sconstantsheaderfile我在问自己,在运行时声明的常量上使用编译时常量有什么意义?constfloatroot_two=1.414213562373095048801688724209698078e+00;constfloatroot_two=std::sqrt(2.0f);使用固定的编译时常量但在运行带有函数的应用程序时进行计算时不会引入错误吗?如果您使用运行时常量,那么错误不会被忽略吗? 最佳答案 正如HansPassant所说,它可能为您节

c++ - 处理 map 键中指向值的常量

我有以下代码:#includeusingnamespacestd;structA{};mapdata;intget_attached_value(constA*p){returndata.at(p);}voidreset_all(){for(constauto&p:data)*p.first=A();}我的问题是,当我在data类型中注释和取消注释const时,此代码因类型错误而失败。有什么方法可以在不使用const_cast并且不丢失get_attached_value中的const的情况下解决这个问题? 最佳答案 问题似乎出在p

c++ - (int&&)5 是整数常量表达式吗?

g++接受代码:charb[static_cast(5)];N3936[expr.const]/3将术语定义为:Anintegralconstantexpressionisanexpressionofintegralorunscopedenumerationtype,implicitlyconvertedtoaprvalue,wheretheconvertedexpressionisacoreconstantexpression.[Note:Suchexpressionsmaybeusedasarraybounds[...]我不确定,因为表达式看起来像是int&&类型但是3.9中整数类

c++ - 如何创建对对象的常量引用?

我的设计包含3个类作为我的数据结构。我们将类称为A、B和C。在解析我的输入时,我必须实例化A、B和C的对象。C类的每个对象都需要跟踪A和B类中的相应对象。我当前的实现如下所示:classC{private:A*a;B*b;public:voidsetA(A*a);voidsetB(B*b);}当我使用new创建A和B的对象时,我分配了a和b运算符。问题是我不希望类C的对象能够修改a和b。其实我只需要知道哪个a和b对应一个具体的c即可。一种解决方案是将a和b定义为const指针/对象引用。但是,在对象引用的情况下,我需要在声明它们后立即定义它们。问题是我正在解析多个文件,并且在定义它们时

c++ - 类型名和标量常量的可变参数模板

我正在尝试实现一个通用类模板,它将它的模板参数转发给另一个类,如下所示:templateclassA:publicB{...问题是B可以有这样的标量常量模板:templateclassB{...甚至像这样:templateclassB{...那么,有什么方法可以接受混合的类型名和标量常量作为可变参数模板参数吗? 最佳答案 您可以将值嵌入到类型中。如果我没记错的话,这是boost长期使用的一种技术,并作为std::integral_constant添加到C++11的标准库中(表明它的有用性)。使用C++17,事情变得更加简单。temp

c++ - 为什么我们不能在声明之前使用#define 预处理器的常量

如果#define是预处理器指令,那么编译器将在实际编译之前知道该常量是什么,因为它已经被定义,但如果我们在它之前使用它确实会出错。这是我要运行的代码:#includeusingnamespacestd;voidsum(){cout这会产生如下错误:undefinedsymbolpi根据理论,(#)语句将首先被编译,因此编译器已经知道pi是什么。 最佳答案 因为宏是以“自上而下”的方式处理的。[cpp.replace]Apreprocessingdirectiveoftheform#defineidentifierreplaceme